package decorativePattern

/**
 * 装饰模式,动态地给一个对象添加一些额外的职责。就增加功能来说，装饰模式比生成子类更为灵活。
 *
 * 模拟普通车辆和运营车辆的不同上路手续
 *
 * 此使用场景，假设从车间出厂的车有两种，一种是可以直接面向普通消费者的，另一种是面向一些运营车辆的
 *
 * 举个栗子:
 * 小A同学毕业之后工作了几年,攒了点钱,所以买了一辆"五菱之光"代步,但是烦恼随之而来,一辆车需要"保养","加油","停车费"开销太大了.
 * 所以小A同学就想用这辆车挣点外快,所以就注册到了"网约车平台",然后就愉快的挣到了外快.(从编程的角度:一辆车想要变成运营车辆,需要扩展属性,装饰模式就派上了用场)
 *
 * 动态的给一个对象添加一些额外的职责
 *
 * 就好比一个人穿衣服一样，可以简单的装饰一下只穿内衣，但是可能活动范围会受限。如果要外出的话，就需要再增加一层装饰，穿一个外套。
 *
 * 游泳的时候
 *
 * 外出的时候
 *
 * 工作的时候
 *
 * 关键的点：不论一个对象装饰或者不装饰都不影响这个对象是这个对象（如果装饰一下变成了另一个对象就变成“适配器模式”了），添加装饰只是在某些特定的场景会提供一些方便。
 */

/**
 * 错误的示例
 */
fun main() {
    BMW()
    Taxi()
}